package com.nb.sdk;

import java.lang.reflect.Proxy;

/**
 * API代理工厂
 * @author lihaoyang6
 * @date 2023年11月24日 21:58
 */
public class ApiFactory {

    public static <T> T getApi(Client client,Class<T> api){
        //要增强的处理逻辑
        HttpInvokeHandler handler = new HttpInvokeHandler(client);
        /**
         * 返回代理对象：$Proxy0
         * Proxy.newProxyInstance三个参数：
         * 1，要用哪个ClassLoader来产生代理对象。
         *     它和被代理对象使用同一个ClassLoader，因为产生的代理对象里包含了一个被代理对象。
         * 2，产生的被代理对象实现了哪些个接口：接口里有哪些方法，生成的代理就有哪些方法
         *  new Class[]{UserDAO.Class}多个接口时，或userDAO.getClass().getInterfaces()
         * 3，当产生代理之后，当调用代理里面方法的时候，用哪一个Handler进行处理
         */
        return (T) Proxy.newProxyInstance(api.getClassLoader(),new Class[]{api} , handler);
    }
}
